/*
	Name: ABS （航空订票系统——单线程版）
	Copyright: (gitee/github )Dmsj
	Author: dmsj
	Date: 16/04/24 11:07
	Description: cpp/(细节看我repository）
*/

//14/04/15 18:10
/** TODO:(上一版本）
//ABS(团队合作后我个人初步基于团队代码进行优化的orignal project .DEV 1.1版），
后续我还会继续优化代码格式，
//完善project的美观简约性和高效可读性，毕竟code是写给别人看的嘛，
一堆“shi山”般的作品又有谁想读呢，对吧？
*/

//16/04/20 11:07
/** TODO:(此版本）
//ABS(团队合作后我个人初步基于团队代码进行优化的orignal project .DEV 1.3版），
虽然感觉累赘的format和code_line还是有很多，[像look and find Format,我本来是想把它们
改成类似二级菜单的similar 版本的，免得像现在这样明明基本相同的原理，
可以写一租完事的，却写了2X倍的量]，但我还是选择不改了，这不是我因为我懒或者太累了，
（好吧，有点）是因为我想尊重并保留小组partner的劳动成果，而且虽然表面上累赘繁琐了些，
但也真是如此，反而简化了大部分format的复杂度，感官上比我所想的写法更直观明了，
方便每个读者快速认知理解每个format的原理和作用，而我认为这才是最好的效果，因为毕竟
		“代码，是要写给人看的嘛。”
	因此，THIS version主要是把"ALL_format.cpp"这坨"屎山“代表完成细化拆解，分为了具体的几大类
"format.h"头文件，方便各位读者理解使用，同时还小小完善处理了下本系统在时间time这一块的疏忽破绽
，并再一次美化了下界面，至此我个人DEV版的ABS算是告一段落了，接下来的update（如果有的话）,将会在VC版的ABS中
展现（方向主要以多线程和gui界面为主）。
*/

//23/04/24 10:03
/* TODO (dmsj#2#): (git copy )"此version 与上一version 一致，
//目的是为了提醒并解释为什么我.h file愚蠢的用了没必要而且还占编译时长
和空间的static 函数。第一是因为刚开始写的时候，确实对.h file 的写法不熟悉，
摸索出来了一条-歧路-，但这其实不是主要原因。
最主要的原因是我们小组一开始并未都写成含.h file 的形式， 以至于当我着手
想改时，面对 那庞大的工作量也是被迫无奈出此下策，选择减少对逻辑的处理，
以求换取工作的效率，想着如果能有时间多的话再改改，
但现在看来确实不可能有多的时间了，唉，还请多多包涵^C^"
*/

//# define AdminAccount "admin1234"  管理员密码

# include "stdio.h"
# include "stdlib.h"
# include "string.h"
# include "windows.h"

# include "all_struct.h"
# include "display.h"
# include "FindAndLook.h"
# include "admin.h"
# include "guest.h"
# include "judge.h"
# include "tool.h"
# include "menu.h"

/*弃用：
//全局变量块
//record online now
//char Guest_UserName[20];
//N_guest  *current_Guest = NULL;
//current_Guest->airplanceList = NULL;
//int i = 0;//玩点花活,运用下sprintf 的int性质(原来是这样）。
*/

//main format （本system为单线程version）
int main(void)
{
	int TorF = 0;//当前order
	int iFormer = -2;//前一order
	int y,m,d;//时效性判断符 年月日

	char Guest_UserName[20];//用于记录当下登录旅客的昵称ID，主要运用于调试process中，实际无用途，可忽略
	N_guest  *current_Guest = NULL;//表示当下登录旅客的结构体（节点）块

	printf ("++++===================================++++\n");
	printf ("++++  欢迎使用本航空订票管理系统(ABS)  ++++\n");
	printf ("++++===================================++++\n");
//	printf ("注意！！请确保关闭系统前内部有所需链表\n");

	//确定当前时间(精确到day)
	//为pre_selectair()删除无效过期数据 函数做准备
	fprintf (stdout,"（注：测试时，当前时间请写2023 12 12 左右的时间）\n");
	fprintf (stdout,"请输入当前的所处年：");
	scanf("%d",&y);
	fflush(stdin);

	fprintf (stdout,"请输入当前的所处月：");
	scanf("%d",&m);
	fflush(stdin);

	fprintf (stdout,"请输入当前的所处日：");
	scanf("%d",&d);
	fflush(stdin);


	//inti.h
	//创建航班和旅客链表的头结点
	
	//构造air结点空间
	Airplane* airplaneHead = (Airplane *) malloc(sizeof(Airplane));
	airplaneHead->next = NULL;

	//构造guest结点空间
	Guest* guestHead = (Guest *) malloc(sizeof(Guest));
	guestHead->next = NULL;

	//初步获取相关数据（读二进制文件）
	read_file(airplaneHead, guestHead);
	//删除无效过期数据
	pre_selectair(airplaneHead,y,m,d);

	//int TorF;
	while(1)
	{
		iFormer = TorF ;//前一order 录入
		/* TODO (#1#): 
		一级菜单执行处 
		详情见menu.h*/
		TorF = superMenu();
		switch(TorF)
		{
			case 1:
				//system("cls");
				adminitorInteface(TorF,airplaneHead,guestHead);
				break;
			case 2:
				//system("cls");
				guestInteface(TorF,airplaneHead,guestHead,
				              current_Guest,Guest_UserName);
				break;
			case 3:
				//system("cls");
				rollInfo(guestHead);
				break;
			case 4:
				save_byFile_1(airplaneHead,guestHead);
				save_byFile(airplaneHead,guestHead);
				break;
			case 0:
				if (4 != iFormer)
				{
					char key ;
					fprintf (stdout,"是否保存? a) 保存 b)不保存\n");
					printf("	> >请选择：");
					fflush(stdin);
					scanf("%c",&key);

					if (key == 'a'||key == 'A')
					{
						save_byFile(airplaneHead,guestHead);
						save_byFile_1(airplaneHead,guestHead);
					}
					else
					{
						printf ("\n|!|未保存当前信息，是否确定放弃保存（无法找回）？\na]Yes  b]No\n");
						printf("	> >请选择：");
						fflush(stdin);
						scanf("%c",&key);

						if (key == 'b'||key == 'B')
						{
							save_byFile(airplaneHead,guestHead);
							save_byFile_1(airplaneHead,guestHead);
						}
						else
							printf ("\n|·|已放弃当前修改，恢复至上次保存情况\n");
					}

				}
				if ( airplaneHead->next && guestHead->next )
					empty_LinkedList(airplaneHead,guestHead);
				printf("欢迎下次使用！\n");
				system ("pause");
				exit(0);

			default :
				printf("Error:inviald order , try again！\n\n");

		}

	}

	return 0;
}
